草庐IT

SQL EXISTS 运算符

全部标签

c++ - 为什么我不能有一个纯虚拟赋值运算符?

我有点迷失在C++运算符中。我想为两个不同的类强制执行赋值运算符,即一个可以相互分配一个:classA{public:virtualA&operator=(constA&a)=0;};classB:publicA{public:virtualA&operator=(constA&a)override{std::cout第一个任务似乎完成了任务,调用了“B”。同样,对于“c=b”,调用“C”。但是,当我取消注释第二部分时,出现链接器错误。如果我像这样定义A的运算符:virtualA&operator=(constA&a){std::cout我得到“B”、“A”。嗯?有人可以解释为什么在分

c++ - 总是使用构造函数而不是显式转换运算符

我有以下类(class):templateclassFoo{public:Foo(T1*obj):obj(obj){}templateFoo(constFoo&other):obj(other.obj){}templateexplicitoperatorFoo(){returnFoo(static_cast(obj));}T1*obj;};第二个构造函数的目的是从Foo隐式转换至Foo如果从X*进行隐式转换,则允许至Y*是允许的。转换运算符允许从Foo进行显式转换至Foo使用来自X*的显式转换至Y*.但我注意到转换运算符从未被使用过。编译器总是使用第二个构造函数,即使我进行显式转换也是

c++ - 成员访问运算符的 lhs 求值与其参数的副作用之间是否存在先序关系?

这个问题在这里已经有了答案:Inf(x),canxbeevaluatedbeforef?(2个答案)关闭5年前。我已阅读Orderofevalution来自cppreference,但我找不到任何与这种情况有关的规则。这是否意味着没有sequenced-before关系或者我错过了什么?谢谢。下面的代码片段给出了一个例子。#includestructFoo{voidfunc(std::unique_ptr){}};intmain(){autoptr=std::make_unique();ptr->func(std::move(ptr));//Isthisvalid?return0;}

c++ - 哪些整数运算是不安全的?

我的应用程序计算用户指定的一些整数表达式。我想检测所有潜在的错误并报告它们。所有计算都在int64_t中完成(签)。公式可能包括几乎所有的C++二元运算符(+、-、*、/、%、|、||、&、|1045,7915|和六个比较运算符)和整数(可能是负数)。问题是:在计算这样的表达式时可能会发生什么错误,从而使我的程序终止?我想到了其中两个:除以零(或模数)师&&减-1。有符号整数溢出也可能发生,但据我所知,在这种设置下它不会对大多数CPU造成任何危害,因此我们忽略它。 最佳答案 这是一个很好的引用:https://wiki.sei.cm

c++ - 条件运算符的值类别

考虑以下代码:intx;int&f(){returnx?x:throw0;}使用gccversion7.3.0(Ubuntu7.3.0-27ubuntu1~18.04)我得到以下编译错误:cannotbindnon-constlvaluereferenceoftype‘int&’toanrvalueoftype‘int’请注意,这在clang中编译得很好。这是(我认为是)标准中的相关声明:N4659[8.16.2.1](ConditionalOperator):Thesecondorthethirdoperand(butnotboth)isa(possiblyparenthesized

c++ - 运算符重载 C 结构

我希望能够为我在C++代码中使用的C结构(structtm中的/std::tm中的)创建赋值运算符。这对我的程序来说不是必需的,我只是想知道是否可以覆盖。任何帮助将不胜感激。在头文件tm_operators.hpp中:#ifndeftm_operators_hpp#definetm_operators_hpp#include#includestaticinlinebooloperator==(conststd::tm&dt1,conststd::tm&dt2){return(dt1.tm_yday==dt2.tm_ydayanddt1.tm_year==dt2.tm_year);}/*

c++ - 为什么 C++ 中指向方法取消引用运算符的指针具有如此低的优先级?

C++中指向成员解引用运算符(.*和->*)的指针的运算符优先级为4,而函数调用运算符的优先级为2。这几乎可以保证需要括号:#includestructA{intb;intfunc1(inta){returna+b+1;}intfunc2(inta){return2*a+b;}};intmain(){Aa;a.b=3;int(A::*ptr)(int);ptr=&A::func1;std::cout在我看来,将.*定义为优先级2会(具有从左到右的关联性)否定括号的需要,并且没有明显的不良副作用。选择这个优先级的原因是什么? 最佳答案

c++ - 如何检查 C++ 编译时是否存在运算符的特定重载?

我有一个类,它为多种输入类型重载()运算符,即structType{voidoperator()(int);voidoperator()(std::string);};现在,我想使用SFINAE检查是否存在特定的()运算符重载,即if(Type()(std::string)overloadexists){//dosomething...}这在C++11中可行吗?(我不能使用C++14或C++17)。注意:在实际代码中,有一个模板类接受具有某些属性的类类型。该模板中有一个成员函数,它将根据参数类型的()运算符的某些特定重载是否存在而专门化。 最佳答案

c++ - 在逗号运算符的 LHS 中初始化匿名互斥锁持有类实例

假设我有这样的代码:#include"boost/thread/mutex.hpp"usingboost::mutex;typedefmutex::scoped_locklock;mutexmut1,mut2;voidFunc(){//...}voidtest_raiicomma_1(){lockmut1_lock(mut1);Func();}voidtest_raiicomma_2(){(lock(mut1)),Func();}voidtest_raiicomma_3(){(lock(mut1)),(lock(mut2)),Func();//Warning!}intmain(){te

c++ - <hash_set> 相等运算符在 VS2010 中不起作用

示例代码:std::hash_seths1;//alsoitrystd::unordered_set-sameeffectstd::hash_seths2;hs1.insert(15);hs1.insert(20);hs2.insert(20);hs2.insert(15);assert(hs1==hs2);hash_set不按照散列函数定义的某种顺序存储元素...为什么?请注意,此代码使用stdext::hash_set在VS2008中工作。 最佳答案 在VisualC++2010中,hash_set和unordered_set的